home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
music
/
7
/
ramdisk
/
copys.s
< prev
next >
Wrap
Text File
|
1985-11-19
|
6KB
|
244 lines
*
* COPY.S
*
* WRITTEN NOV 85 BY jENS-uWE mAGER
*
* Pathnames added March 86 by Scott Adams.
* See Ram.doc for usage.
*
* OFFSETS INTO BASE-PAGE
PRGLEN EQU $C
DATALEN EQU $14
BSSLEN EQU $1C
CMDLIN EQU $80
* TRAPS
BIOS EQU 13
XBIOS EQU 14
TOS EQU 1
* FUNCTIONS
PRSTRF EQU 9
CREATF EQU $3C
OPENF EQU $3D
CLOSEF EQU $3E
READF EQU $3F
WRITEF EQU $40
LSEEKF EQU $42
TERMF EQU $4C
TEXT
START:
LEA INITS,A0
BSR PRSTR
LEA FNAME,A0
BSR OPEN
BMI ERRXIT
MOVE.W D0,D7 ;FILE HANDLE
BSR FILELEN
BMI ERRXIT
LEA BUFFER,A0
MOVE.L A0,-(SP) ;BUFFER AD
ADD.L D0,A0
MOVE.B #0,(A0)+
MOVE.L A0,LISTEND
LEA -256(SP),A1
SUB.L A0,A1
MOVE.L A1,MAX
MOVE.L D0,-(SP) ;LENGTH
MOVE.W D7,-(SP) ;HANDLE
MOVE.W #READF,-(SP)
TRAP #TOS
ADD.L #12,SP
TST.L D0
BMI ERRXIT
MOVE.W D7,D0
BSR CLOSE
BMI ERRXIT
LEA BUFFER,A6
;
MOVE.W (A6),DRIVE ; CONTAINS c:
CMP.B #':",DRIVE+1
BNE ERRXIT
;
MOVE.L LISTEND,A6 ; START AT END OF LIST
LEA -1(A6),A6
MAINLP: BSR SKIP
BCS EXIT
BSR PROGRESS
MOVE.L DESTST,A0
BSR CREAT
BMI ERRXIT
MOVE.W D0,D6 ;HANDLE FOR NEW FILE
MOVE.L STRING,A0 ;SOURCE STRING
BSR OPEN
BMI ERRXIT
MOVE.W D0,D5 ;HANDLE FOR OLD FILE
COPYLP: MOVE.L LISTEND,-(SP)
MOVE.L MAX,-(SP)
MOVE.W D5,-(SP)
MOVE.W #READF,-(SP)
TRAP #TOS
ADD.L #12,SP
TST.L D0
BMI ERRXIT
BEQ ISEOF
MOVE.L LISTEND,-(SP)
MOVE.L D0,-(SP)
MOVE.W D6,-(SP)
MOVE.W #WRITEF,-(SP)
TRAP #TOS
ADD.L #12,SP
TST.L D0
BMI ERRXIT
BRA COPYLP
ISEOF: MOVE.W D6,D0
BSR CLOSE
BMI ERRXIT
MOVE.W D5,D0
BSR CLOSE
BMI ERRXIT
MOVE.L A5,A6
BRA MAINLP
EXIT:
MOVE.W #0,-(SP)
BRA.S XIT
ERRXIT:
MOVE.W #1,-(SP)
XIT:
MOVE.W #TERMF,-(SP)
TRAP #TOS
PROGRESS:
LEA MESS1,A0
BSR PRSTR
MOVE.L STRING,A0
BSR PRSTR
LEA MESS2,A0
BSR PRSTR
MOVE.L DESTST,A0
BSR PRSTR
LEA MESS3,A0
PRSTR:
MOVE.L A0,-(SP)
MOVE.W #PRSTRF,-(SP)
TRAP #TOS
ADDQ.L #6,SP
RTS
OPEN:
CLR.W -(SP) ;READONLY
MOVE.L A0,-(SP)
MOVE.W #OPENF,-(SP)
TRAP #TOS
ADDQ.L #8,SP
TST.W D0
RTS
CREAT:
CLR.W -(SP) ;STD FILE R/W
MOVE.L A0,-(SP)
MOVE.W #CREATF,-(SP)
TRAP #TOS
ADDQ.L #8,SP
TST.W D0
RTS
CLOSE:
MOVE.W D0,-(SP)
MOVE.W #CLOSEF,-(SP)
TRAP #TOS
ADDQ.L #4,SP
TST.W D0
RTS
FILELEN:
MOVE.W D0,-(SP)
MOVE.W #2,-(SP)
MOVE.W D0,-(SP)
CLR.L -(SP)
MOVE.W #LSEEKF,-(SP)
TRAP #TOS
ADD.L #10,SP
MOVE.W (SP)+,D1
MOVE.L D0,-(SP)
MOVE.W #0,-(SP)
MOVE.W D1,-(SP)
CLR.L -(SP)
MOVE.W #LSEEKF,-(SP)
TRAP #TOS
ADD.L #10,SP
MOVE.L (SP)+,D0
RTS
;
; SKIP THE PATHNAMES. BUILD DESTINATION NAME BACKWARDS INTO BUFFER
;
SKIP0: MOVE.L A5,A6
SKIP: MOVE.L A6,A5 ;WHERE WE LEFT OFF IN LIST
LEA DESTEND,A0 ;WHERE TO PUT IT
CLR.B -(A0) ;NULL TERMINATED STRING
SKLP MOVE.B -(A5),D0
BEQ SKLP ;SKIP 0'S
CMP.B #$20,D0 ;SKIP SPACES
BEQ SKLP
CMP.B #$A,D0
BEQ SKLP
CMP.B #$D,D0 ;BEGIN OF NEXT LINE
BEQ SKIPEND
CMP.B #'\',D0
BEQ SKIPEND
CMP.B #':",D0
BEQ SKIPEND
MOVE.B D0,-(A0) ;PUT INTO DESTINATION NAME
BRA SKLP
;
SKIPCR MOVE.B -(A5),D0
CMP.L #BUFFER,A5
BEQ SKIPEOF ;AT INITIAL DRIVE SPEC! we done!
SKIPEND CMP.B #$D,D0 ;FIND CR OF PREVIOUS LINE
BNE SKIPCR
CLR.B (A5) ;MAKE SOURCE STRING NULL TERMINATED
;
CMP.L #DESTEND-1,A0 ;SEE IF WE GOT ANYTHING
BEQ SKIP0 ;NO
;
MOVE.B DRIVE+1,-(A0) ;PUT IN DRIVE SPEC
MOVE.B DRIVE,-(A0)
MOVE.L A0,DESTST
MOVE.L A5,A6 ;SAVE WHERE WE WHERE
MOVE.L A5,STRING ;save start of source string
ADDQ.L #2,STRING ;SKIP CR,LF
RTS
;
SKIPEOF: OR #1,CCR
RTS
DATA
LISTEND: DC.L 0
MAX: DC.L 0
FNAME: DC.B 'FILE.LST',0
MESS1: DC.B 'Copying ',0
MESS2: DC.B ' -> ',0
INITS: DC.B $1B,'E',13,10,'Fast Ram Disk Copy by Jens-Uwe Mager & Scott Adams',13,10 ;fall through mess3
MESS3: DC.B 13,10,0
BSS
DESTST DS.L 1
STRING DS.L 1
DRIVE: DS.W 1
DESTNAME: DS.B 128
DESTEND:
;
; NOTE EVEN THOUGH BUFFER IS 1 BYTE THE PROGRAM WILL USE ALL
; MEMORY FROM BUFFER TO START OF STACK, OR ALL MEMORY AVAILABLE!
;
BUFFER: DS 1
;
END